Gleam: Functions
from Gleam Launguage Tour
Functions
関数は fn で宣言する
code:gleam
fn double(a: Int) -> Int {
multiply(a, 2)
}
fn multiply(a: Int, b: Int) -> Int {
a * b
}
pub を付けないと、モジュール 外からアクセスできないプライベート関数になる
引数と戻り値の 型注釈 は任意だが、付けることで設計の意図を伝えることができる
Higher order functions
Gleam では 関数は値
変数に 束縛 したり、他の関数に渡すことが可能
高階関数 のサンプルコード
code:gleam
fn twice(argument: Int, passed_function: fn(Int) -> Int) -> Int {
passed_function(passed_function(argument))
}
fn add_one(argument: Int) -> Int {
argument + 1
}
関数の型を定義するには、fn を用いる
Anonymous functions
無名関数 もサポート
let add_one = fn(a) { a + 1 }
名前付き関数と同じように利用できる
Gleam: Functions#66ab73c775d04f0000a5bea0
io.debug(add_one(1))
定義されたときにスコープ内にあった変数を参照できるため、クロージャ になる
code:gleam
let secret_number = 42
let print_secret = fn() { io.println(int.to_string(secret_number)) }
print_secret() // 42
Function captures
関数キャプチャ
Gleam の機能の 1 つで、1 つの引数を受け取り、「その引数を持つ別の関数」を即座に呼び出す無名関数を作成する省略記法
code:gleam
fn add(a: Int, b: Int) -> Int {
a + b
}
let add_one = add(1, _)
add_one(2) // 3
無名関数 fn(a) { some_function(..., a, ...) } は some_function(..., _, ...) と等価である
Generic functions
WIP...